双目OV5640摄像头

双目模块的安装

按照如下方式将双目模块插入到开发板上,注意箭头位置需要对齐。另外将P2使用跳线帽跳至+3.3V位置,使得双目模块的供电电源为3.3V

image-20251124103837685

新建vivado工程

我们要实现的结果是将双目摄像头在HDMI和LCD上实时显示出来,实现思路是用2个只写的VDMA将摄像头数据搬移到DDR中,然后再用两个只读的VDMA分别从DDR中取出然后分别通过v_axi4s_vid_out_0 IP核和v_axi4s_vid_out_1 IP核在HDMI和LCD显示。本次测试因为涉及到HDMI和LCD,所以需要参考部分之前HDMILVGL测试的工程代码。

在之前HDMI工程的基础上进行修改:首先使能 EMIO 的两个引脚,用来连接摄像头的 SCCB 接口,并配置的管脚约束如下:

将zynq IP核的三个FCLK时钟修改成100,125,200。其中FCLK_CLK2作为扩展的ENET1的时钟。

image-20250811094427782

搜索vdma进行添加:

image-20250811091956366

对四个vdma进行配置,两个读,两个写,并按照下图进行参数的配置

两个只读的VDMA:

image-20250811092106050

两个只写的VDMA配置:

image-20250811092150372

添加两个clk_wiz IP核,一个用来驱动HDMI显示时钟,一个用来驱动LCD显示时钟,搜索clk:

image-20250811092844993

设置HDMI的clk_wiz IP:将其设置为动态时钟,时钟由AXI总线进行控制,输入是通过FCLK_CLK0的100MHZ提供:

image-20250811094619192

HDMI需要用到两个时钟,这两个时钟呈5倍关系:

image-20250811094850265

设置LCD的clk_wiz IP:将其设置为动态时钟,时钟由AXI总线进行控制,输入是通过FCLK_CLK0的100MHZ提供:

image-20250811095805946

LCD只需使能一个时钟输出:

image-20250811095908877

参考之前的 HDMI Test 文档进行为HDMI显示添加其他所需要的 IP 核:

添加搜索timing核并按下图进行配置:

image-20250625140706307

image-20250625140834752

搜索video out核并按下图进行配置:

image-20250625140915948

image-20250625141007912

需要使用到自定义IP:dvi_transmitter。该 IP 核位于工程目录下的 ip_repo 文件夹中。我们需要将其添加到工程的 IP 库中。在 Block Design 中连接 DVI Transmitter 模块的接口信号,并引出外部端口(只需要引出 TMDS 端口),具体的连接方式如下图所示:

image-20250902140426561

image-20250902140639588

 

和上述步骤一样,找到我们自定义的 IP 核 ov5640_capture,将其添加到工程的 IP 库中

 

image-20250828171200725

搜索 v_vid_in_axi4s,这个模块的作用是将标准的视频格式输出转换成AXI4-Stream 的数据流,并进行配置:

image-20250811102256881

image-20250811102837659

按照下图所示连接ov5640,v_vid_in_axi4s,读操作的vdma:

image-20250828171240466

参考LVGL测试文档增加video out 模块,这个模块的作用是将AXI4-Stream 的数据流转换成标准的视频格式输出,与RGB LCD屏幕对应。

image-20250811104245419

增加Video Timing Controller 模块:搜索并添加 video timing controller模块,并双击打开配置页进行配置:

image-20250811104605009

image-20250811104629999

添加一个constant模块来添加一个常量1,用于连接我们各个模块的ce以及aclken 使能

image-20250811105046077

 

image-20250811105106316

后续连接参考LVGL测试文档,至此,点击 Run connection automation 来自动连接剩下的走线,在弹出的设置对话框里勾选所有内容之后系统将自动帮我们连接好剩下的信号线以及添加需要的模块。最后生成的整体框图如下:

image-20250902140900555

保存工程,然后点击source→Design Source ,右键我们创建的BLOCK工程,点击create HDL wrapper,打包BLOCK文件,至此,Block Design 部分已经设置完成。

根据原理图进行管脚配置:配置完成的.xdc:

 

对工程进行编译和综合,生成bitstream,File→Export→Export hardware,导出.xsa文件。

新建vitis工程

同样新建平台工程和应用工程,此次新建的代码文件是在18-LVGL文档和19-AUDIO代码的基础上进行修改:添加新的摄像头相关的文件代码:新建文件夹emio_sccb_cfg,ov5640,新建文件xadc.c,最终需要的src文件如下:

image-20250811111256288

修改clk_wiz文件代码:

 

main.c:

 

编译调试

将HDMI,LCD和ZYNQ开发板进行连接,

使用TYPE-C连接开发板JTAG口和电脑,进行Build,debug,观察HDMI或LCD显示。